package cn.kgc.tangcco.tcbd1011.no13.base.properties.factory;

import java.util.HashMap;
import java.util.Map;

import cn.kgc.tangcco.tcbd1011.no13.base.properties.PropertiesUtils;

/**
 * @author 22900
 *工厂类。实例化封装在properties内的完全限定名（包名+类名）对象
 */
public class PropertiesFactory {
	//封装一个静态的map集合，用来储存key与实例化后的对象
	private static Map<String,Object> map  = new HashMap<>();
	
	//提供一个通过key反射实例化一个对象的方法
	public static Object getInstance(String key) {
		//声明一个Object对象，用来反射实例化后的对象
		Object obj = null;
		//判断是否已经实例化过对象，如果有，就直接返回该对象
		if ( map.containsKey(key) ) {
			obj = map.get(key);
		}else {
			
			//获得value
			String value = PropertiesUtils.getInstance().getValue(key);
			//通过完全限定名然后反射出一个对象
			try {
				obj = Class.forName(value).newInstance();
				map.put(key, obj);
			} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
				e.printStackTrace();
				System.out.println("PropertiesFactory反射对象出现问题");
			}
		}		
		return obj;
	}
}
